import { Controller, Post, Get, Body, Param, Put, Patch, Delete, Query, UseGuards, Request, Headers } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { UserService } from './user.service';
import { CreateUserDto, UpdateUserDto, QueryUserDto, LoginDto, ChangePasswordDto, FindPasswordDto } from './user.dto';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) { }

  // 创建用户（包含userImage URL）
  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return this.userService.create(createUserDto);
  }

  // 分页查询用户
  @Get()
  // @UseGuards(AuthGuard('jwt')) // 需登录才能查询用户列表
  findAll(@Query() query: QueryUserDto) {
    return this.userService.findAll(query);
  }

  // 查询单个用户
  @Get(':id')
  // @UseGuards(AuthGuard('jwt'))
  findOne(@Param('id') id: string) {
    return this.userService.findOne(id);
  }

  // 更新用户（支持更新userImage URL）
  @Patch(':id')
  // @UseGuards(AuthGuard('jwt'))
  update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
    return this.userService.update(id, updateUserDto);
  }

  // 删除用户
  @Delete(':id')
  // @UseGuards(AuthGuard('jwt'))
  remove(@Param('id') id: string) {
    return this.userService.remove(id);
  }

  // 切换账号状态
  @Patch(':id/status')
  // @UseGuards(AuthGuard('jwt'))
  toggleStatus(@Param('id') id: string, @Body('isEnabled') isEnabled: boolean) {
    return this.userService.toggleStatus(id, isEnabled);
  }

  // ========== 新增核心接口 ==========
  /**
   * 登录接口（无需鉴权）
   */
  @Post('login')
  login(@Body() loginDto: LoginDto) {
    return this.userService.login(loginDto);
  }

  /**
   * 退出登录（需鉴权）
   */
  @Post('logout')
  @UseGuards(AuthGuard('jwt'))
  logout(
    @Request() req, // 获取登录用户ID
    @Headers('authorization') authHeader: string, // 获取token
  ) {
    const token = authHeader?.replace('Bearer ', '') || '';
    return this.userService.logout(req.user.userId, token);
  }

  /**
  * 简化版：修改密码（支持旧密码/手机号/邮箱验证）
  */
  @Patch('change-password')
  // @UseGuards(AuthGuard('jwt')) // 需登录（已登录用户改密）
  changePassword(
    @Request() req,
    @Body() changePasswordDto: ChangePasswordDto,
  ) {
    return this.userService.changePassword(req.user.userId, changePasswordDto);
  }

  /**
   * 简化版：找回密码（无需登录，仅验证手机号/邮箱）
   */
  @Post('find-password')
  findPassword(@Body() findPasswordDto: FindPasswordDto) {
    return this.userService.findPassword(findPasswordDto);
  }
}